htpasswd 默认创建的密码只有前8位有效

        按照如下命令创建密码

1
htpasswd -c .htpasswd user1

        假如,密码为123456789

        那么访问时,不管是输入 12345678 还是 123456789 甚至是 123456781234 都能顺利通过验证。这是为什么呢?

        htpasswd默认情况,是使用系统库中的crypt()函数来对密码明文进行单向加密的。在网上找到该函数的说明:

        crypt()将使用Data Encryption Standard(DES)演算法将参数key所指的字符串加以编码,key字符串长度仅取前8个字符,超过此长度的字符没有意义。参数salt为两个字 符组成的字符串,由a-z,A-Z,0-9,”.”,和”/“所组成,用来决定使用4096种不同内建表格的哪一个。函数执行成功后会返回指向编码过的字符串指针,参数key所指的字符串不会有所更动。编码过的字符串长度为13个字符,前两个字符为参数salt代表的字符串。

        所以,如果你想创建超过8位的密码,请使用-m参数或者-s 参数,这两个参数分别表示创建的密码以MD5加密方式加密和以SHA方式加密。

1
htpasswd -c -m .htpasswd user1

        这样创建的密码没有8位数限制了。